// files.js - 文件管理相关功能

// DOM元素
const uploadFileBtn = document.getElementById('upload-file-btn');
const uploadFileInput = document.getElementById('upload-file-input');
const filesList = document.getElementById('files-list');

// 加载用户文件列表
async function loadUserFiles() {
  try {
    if (!window.Auth.isLoggedIn()) {
      filesList.innerHTML = '<tr><td colspan="4" class="text-center">请先登录</td></tr>';
      return;
    }

    // 显示加载状态
    filesList.innerHTML = `
      <tr>
        <td colspan="4" class="text-center">
          <div class="spinner-border text-primary" role="status">
            <span class="visually-hidden">加载中...</span>
          </div>
        </td>
      </tr>
    `;

    // 获取文件列表
    const response = await fetch('/api/files/user/files', {
      credentials: 'include'
    });

    if (!response.ok) {
      throw new Error('获取文件列表失败');
    }

    const files = await response.json();

    // 清空现有内容
    filesList.innerHTML = '';

    if (files.length === 0) {
      filesList.innerHTML = '<tr><td colspan="4" class="text-center">暂无文件</td></tr>';
      return;
    }

    // 渲染文件列表
    files.forEach(file => {
      const row = document.createElement('tr');

      row.innerHTML = `
        <td>${file.filename}</td>
        <td>${window.Utils.formatFileSize(file.size)}</td>
        <td>${window.Utils.formatDate(file.createdAt)}</td>
        <td>
          <a href="${file.url}" class="btn btn-sm btn-primary" download>下载</a>
          <button class="btn btn-sm btn-danger delete-file" data-file-id="${file.id}">删除</button>
        </td>
      `;

      // 添加删除文件事件监听
      row.querySelector('.delete-file').addEventListener('click', () => {
        if (confirm('确定要删除这个文件吗？')) {
          deleteFile(file.id);
        }
      });

      filesList.appendChild(row);
    });
  } catch (error) {
    console.error('加载文件列表错误:', error);
    filesList.innerHTML = `<tr><td colspan="4" class="text-center text-danger">加载文件列表失败: ${error.message}</td></tr>`;
  }
}

// 上传文件
async function uploadFile(file) {
  try {
    const formData = new FormData();
    formData.append('file', file);

    const response = await fetch('/api/files/upload', {
      method: 'POST',
      body: formData,
      credentials: 'include',
    });

    if (!response.ok) {
      const data = await response.json();
      throw new Error(data.error || '文件上传失败');
    }

    // 上传成功后重新加载文件列表
    loadUserFiles();

    return await response.json();
  } catch (error) {
    console.error('上传文件错误:', error);
    alert('上传文件失败: ' + error.message);
    throw error;
  }
}

// 删除文件
async function deleteFile(fileId) {
  try {
    const response = await fetch(`/api/files/${fileId}`, {
      method: 'DELETE',
      credentials: 'include',
    });

    if (!response.ok) {
      const data = await response.json();
      throw new Error(data.error || '删除文件失败');
    }

    // 删除成功后重新加载文件列表
    loadUserFiles();

    return true;
  } catch (error) {
    console.error('删除文件错误:', error);
    alert('删除文件失败: ' + error.message);
    throw error;
  }
}

// 事件监听器
uploadFileBtn.addEventListener('click', () => {
  if (!window.Auth.isLoggedIn()) {
    alert('请先登录');
    return;
  }

  uploadFileInput.click();
});

uploadFileInput.addEventListener('change', async () => {
  if (!uploadFileInput.files.length) return;

  const file = uploadFileInput.files[0];

  try {
    await uploadFile(file);
    // 清空输入框
    uploadFileInput.value = '';
  } catch (error) {
    // 错误已在uploadFile中处理
  }
});

// 初始化
document.addEventListener('DOMContentLoaded', () => {
  // 文件页面显示时加载文件列表
  document.addEventListener('pageChanged', (e) => {
    if (e.detail.page === 'files') {
      loadUserFiles();
    }
  });

  // 登录后重新加载文件列表
  document.addEventListener('userLoggedIn', () => {
    if (document.querySelector('#files-page:not(.d-none)')) {
      loadUserFiles();
    }
  });
});

// 导出函数
window.Files = {
  loadUserFiles,
  uploadFile,
}; 